AMD, Intel, & NVidia X graphics driver primer [third edition]

The first two editions have a fundamental (nick)-naming error. The modesetting display driver is a device Independent display driver, so is a DIX, not a DDX. Since editing is not allowed, I present here a:

third edition]

“Drivers” for the subject brands of GPUs for X, whether Wayland or Xorg, consist of multiple components or layers. This primer discusses only the first two layers, and only for the F.O.S.S.](Free and open-source software - Wikipedia) types included in the openSUSE installation media and standard repositories.

First layer is the kernel device driver. Each kernel comes with one or more of its own modules (drivers) for each brand of GPU. For AMD, there is amdgpu for current and recent APUs/GPUs/IGPs, and radeon for older. For Intel there is gma500 for some SOC configurations, and i915 for the vast majority. For NVidia there is only nouveau. These kernel modules provide Kernel ModeSetting (KMS) functionality that the foundational X display driver layer unconditionally depends upon.

The original foundational X display drivers are all hardware device dependent, and thus are called DDX, for device dependent X (display driver). Again, for AMD there is amdgpu for current and radeon for older; for intel there is only intel; and for NVidia there is only nouveau. Each of these is provided by an upstream optional xf86-video-* rpm package. However, a newer technology generic display driver exists, now more than six years old, that functions as if it was device dependent, but which is in fact created for supporting AMD, Intel, NVidia (and others), not surprisingly, called modesetting. This modesetting DIX is provided by the X server rpm package rather than a separate rpm, so is not optional, unlike the xf86-video-* rpms. Because it is relatively new, it does not support older GPUs (roughly prior to Gen4 for Intel, or 2007 or 2008 for others).

Even though upstream modesetting is the default display driver, and the xf86-video-* rpms are technically optional, most openSUSE installations include the rpm xorg-x11-driver-video, which is a metapackage that installs every one of the xf86-video-* packages. This metapackage often causes older GPUs unsupported by the modesetting DIX to be supported by a default installation, which in effect preempts the upstream default modesetting DIX that supports most non-ancient GPUs that are not too new for standard support.

Because of this preemptive override, most people speaking of graphics “drivers” don’t even know the modesetting DIX exists. And because of the similar naming for kernel modules and display drivers, discussion of graphics “drivers” is often lacking clarity. This is particularly true for those for NVidia GPUs. Discussion of kernel driver is often intended when technically speaking of a display driver, and vice versa.

Those who wish to employ the modesetting DIX can most simply do so by uninstalling the xorg-x11-driver-video package and whichever xf86-video-* package is applicable to the installed GPU(s). Whether the modesetting DIX will perform “better” than a GPU-specific xf86-video-* package’s DDX can only be determined by trying both and comparing behavior. It is not unusual that tearing or other buggy behavior can be eliminated or reduced by a display driver switch.

For X there is additionally a pair of limited functionality drivers that do not depend on KMS, which support AMD, Intel, NVidia and more. These are FBDEV and VESA. They are unaccelerated, and support few, if any, modern widescreen resolutions, typically limited to 4:3 modes 1280x1024, 1600x1200, or less, often only 1024x768. Most find these acceptable only for rescue operations, or for servers where X is in use little to none. Not infrequently it is one of these two that are required for installation to proceed. When this happens, usually the bootloader on the installed system is configured to include nomodeset on each of the linux lines. The result of nomodeset from the bootloader is all competent FOSS display driver support is precluded, making the user unhappy with graphics performance, or confronting him with a black screen when the login greeter is expected, until it is discovered why and how to remove nomodeset from the boot process.

In summary, “drivers” required for competent X operation are:

  • amdgpu
    (kernel) plus amdgpu (DDX) or modesetting (DIX) for current and recent AMD GPU/APUs/IGPs
  • radeon
    (kernel) plus modesetting (DIX) or radeon (DDX) for old AMD/ATI GPUs/IGPs
  • gma500
    (kernel) or i915 (kernel) plus intel (DDX) or modesetting (DIX) for Intel GPUs/IGPs
  • nouveau
    (kernel) plus modesetting (DIX) or nouveau (DDX) for NVidia GPUs
2 Likes

Ever considered contributing at https://opensuse.github.io/openSUSE-docs-revamped-temp/?

I never knew it existed. Its URI has IMO a serious flaw. When I’m searching for openSUSE-specific information, my first search term is usually site:opensuse.org, in order to avoid the Ubuntu responses Google is predisposed to return for Linux issues. It wouldn’t surprise me to learn that I’m hardly the only one who does this.

Warning:This documentation has not been deployed to its destination yet.

Foreword

This documentation is curated and maintained by openSUSE volunteers. The contents offered here must be distinguished from the Leap documentation, also available at https://doc.opensuse.org. In contrast to this documentation, Leap manuals inherit the contents from, and closely follow the presentation of, SLE manuals – a commercial product offered by SUSE. Because of this difference the reader should be aware of the following caveats:

  1. The present documentation is the work of volunteers – not SUSE employees – working under the Free and Open Source Software tradition. Our best efforts notwithstanding, inaccuracies and oversights are possible.
  2. Disclaimers and admonitions provide as safe as possible a path for the reader to follow. Yet be aware that openSUSE contributors cannot support every software feature or combination of software.
  3. openSUSE Tumbleweed follows a rolling release model, with software and procedures evolving significantly faster than their equivalents for openSUSE Leap. Thus contents presented here may occasionally be one version behind the version available in Tumbleweed.

In response to these caveats we expect the reader to help us identify typos, omissions, inaccuracies or outdated contents by reporting them, ideally along with suggested improvements.

In advance we thank you and will try to respond to your submissions as quickly as possible. We hope you enjoy our contents.


Fork and clone: Hello World - GitHub Docs

Local builds: https://github.com/openSUSE/openSUSE-docs-revamped-temp/blob/dev/CONTRIBUTING.md

1 Like